package br.com.sgc.entities.hotelaria;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sgc.entities.geral.Clinica;
import br.com.sgc.entities.veterinaria.Animal;
import br.com.sgc.enuns.EstadoSaude;

@Entity
@Table(schema = "hotelaria")
public class Hospedagem implements Serializable{

	private static final long serialVersionUID = 7291793551827452441L;
	
	@Id
	@SequenceGenerator(sequenceName="hotelaria.seq_hospedagem", name="SEQ", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,  generator="SEQ")
	private Long id;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_entrada")
	private Date dataEntrada;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_saida")
	private Date dataSaida;
	
	@OneToMany(mappedBy = "hospedagem", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private List<ItensHospedagem> itensHospedagem = new ArrayList<ItensHospedagem>();

	@Column(columnDefinition = "text")
	private String observacoes;
	
	@Column(name = "estado_saude")
	private EstadoSaude estadoSaude;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "animal_id")
	private Animal animal = new Animal();
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "unidade_hospedagem_id")
	private UnidadeHospedagem unidadeHospedagem = new UnidadeHospedagem();
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "clinica_id")
	private Clinica clinica = new Clinica();
	
	@Column(name = "hospedagem_ativa")
	private Boolean hospedagemAtiva;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Date getDataEntrada() {
		return dataEntrada;
	}

	public void setDataEntrada(Date dataEntrada) {
		this.dataEntrada = dataEntrada;
	}

	public Date getDataSaida() {
		return dataSaida;
	}

	public void setDataSaida(Date dataSaida) {
		this.dataSaida = dataSaida;
	}

	public List<ItensHospedagem> getItensHospedagem() {
		return itensHospedagem;
	}

	public void setItensHospedagem(List<ItensHospedagem> itensHospedagem) {
		this.itensHospedagem = itensHospedagem;
	}

	public String getObservacoes() {
		return observacoes;
	}

	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	public EstadoSaude getEstadoSaude() {
		return estadoSaude;
	}

	public void setEstadoSaude(EstadoSaude estadoSaude) {
		this.estadoSaude = estadoSaude;
	}

	public Animal getAnimal() {
		return animal;
	}

	public void setAnimal(Animal animal) {
		this.animal = animal;
	}

	public UnidadeHospedagem getUnidadeHospedagem() {
		return unidadeHospedagem;
	}

	public void setUnidadeHospedagem(UnidadeHospedagem unidadeHospedagem) {
		this.unidadeHospedagem = unidadeHospedagem;
	}

	public Clinica getClinica() {
		return clinica;
	}

	public void setClinica(Clinica clinica) {
		this.clinica = clinica;
	}

	public Boolean getHospedagemAtiva() {
		return hospedagemAtiva;
	}

	public void setHospedagemAtiva(Boolean hospedagemAtiva) {
		this.hospedagemAtiva = hospedagemAtiva;
	}
}
